package com.xahj.bd2104.spark.core

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * Created with IntelliJ IDEA.
 * Author: Amos
 * E-mail: amos@amoscloud.com
 * Date: 2021/9/13
 * Time: 8:31
 * Description: 
 */
object SparkCoreDemo2_RDD {
  def main(args: Array[String]): Unit = {
    //RDD全称 Resilient Distributed Dataset
    // 弹性分布式数据集

    // RDD的5个主要属性
    //- A list of partitions
    //  每个RDD都包含多个分区，分区可以分布在集群的所有节点上

    //- A function for computing each split
    //  RDD的算子操作会并行的执行在RDD的每一个分区上

    //- A list of dependencies on other RDDs
    //  每个RDD都会记录与上游RDD的依赖关系，用于容错和故障重试

    //- Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)
    //  对于二元组作为泛型的RDD，我们可以自定义分区器对象，用于将元素按照条件划分分区
    //  重新分区的操作通常是需要shuffle参数，需要注意shuffle会带来性能损耗

    //- Optionally, a list of preferred locations to compute each split on (e.g. block locations for
    //  an HDFS file)
    //  Spark会使用位置优先的策略，尽可能读取本机数据，避免网络IO





    //RDD的操作

    // 1. 创建RDD



    // 2. 转换算子 transformation
    //    RDD  =>  RDD

    // 3. 行动算子 action
    //    RDD  =>  !RDD

    // 4. 缓存操作  缓存  检查点
    //   cache persist
    //   checkpoint
  }
}
